package opf5.utilidades;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class Fecha {
	private GregorianCalendar fecha;
	
	public Fecha(int dia, int mes, int year, int hora) {
		this.fecha = new GregorianCalendar(year, mes - 1, dia, hora, 0);
	}

	public Fecha(String fecha, String formato) {
		//DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
		DateFormat df = new SimpleDateFormat(formato);
		Date date = null;
		try {
			date = df.parse(fecha);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		
		this.fecha = new GregorianCalendar(cal.get(Calendar.YEAR),
				cal.get(Calendar.MONTH),
				cal.get(Calendar.DAY_OF_MONTH),
				cal.get(Calendar.HOUR_OF_DAY), 
				cal.get(Calendar.MINUTE));
	}
	
	public Fecha() {
		this.fecha = new GregorianCalendar(
				Calendar.getInstance().get(Calendar.YEAR),
				Calendar.getInstance().get(Calendar.MONTH),
				Calendar.getInstance().get(Calendar.DAY_OF_MONTH),
				Calendar.getInstance().get(Calendar.HOUR),
				Calendar.getInstance().get(Calendar.MINUTE));
	}

	@Override
	public String toString() {
		DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm");
		return dateFormat.format(fecha.getTime());
	}

	public String getFechaString(String formato) {
		DateFormat dateFormat = new SimpleDateFormat(formato);
		return dateFormat.format(fecha.getTime());
	}
	
	public int getDia() {
		return fecha.get(GregorianCalendar.DAY_OF_MONTH);
	}

	public int getMes() {
		return fecha.get(GregorianCalendar.MONTH) + 1;
	}

	public int getAnio() {
		return fecha.get(GregorianCalendar.YEAR);
	}

	public int getHora() {
		return fecha.get(GregorianCalendar.HOUR_OF_DAY);
	}

	public boolean esAnteriorA(Fecha fecha2) {
		return this.fecha.before(fecha2.fecha);
	}

	public int calcularEdad() {
		Fecha fechaDeHoy = new Fecha();
		int edad = fechaDeHoy.getAnio() - this.getAnio();
		
		if (fechaDeHoy.getMes() < this.getMes()) {
			edad --;
		} else if (fechaDeHoy.getMes() == this.getMes()) {
			if (fechaDeHoy.getDia() < this.getDia())
				edad --;
		}
		
		return edad;
	}
}
